package LearnAlgorithm.g_数学问题;

/*
一共有N堆石子,编号1...n ,第i堆中有个a[i]个石子。
每一次操作，Alice和Bob可以从任意一堆石子中，取出任意数量的石子
至少取1颗，至多取出这一堆剩下的所有石子
两个人轮流行动,取光所有石子的一方获胜，
Alice为先手
 */
public class bNim游戏 {
	public static void main(String[] args) {
		int[] arr = new int[] {3,4,5};
		System.out.println("先手方：" + solveNim(arr));
	}
	
	/**
	 * NIm游戏，先手面临着2种情况
	 * 1：当所有堆的数字，都异或，的结果=0；必输
	 * 2：结果 != 0，必赢
	 * 至于怎么拿，这个拿的过程我们不去讨论，我们只讨论先手方的结果
	 * 这个方法就是给先手方的结果
	 * @param arr
	 * @return
	 */
	public static boolean solveNim(int[] arr) {
		int res = 0;
		for (int i = 0; i < arr.length; i++) {
			res ^= arr[i];
		}
		return res != 0;
	}
}
